Autenticar usuario y guardar en una cookie con PHP
- Identificador de usuario
- Nombre de usuario
- Clave de acceso
- Marca aleatoria que se ha metido en la cookie

Primero vamos a empezar mostrando el formulario HTML:
<form action=»prueba-cookies.php» method=»post»>
Usuario: <input type=»text» name=»usuario»>
<br>
Clave: <input type=»text» name=»clave»>
<br>
<input type=»checkbox» name=»guardar_clave» value=»1″> Memorizar el usuario en este ordenador
<br>
<input type=»submit» value=»Entrar»>
</form>
Como vemos, tiene los campos para escribir el nombre de usuario y la clave y un campo checkbox adicional para que el usuario marque si quiere que su acceso se guarde en su ordenador.
Ahora voy a mostrar el código que utilizaríamos para recibir por post, del formulario de autentificación, el nombre de usuario y contraseña. Este código también tiene que detectar si el usuario quería que se guardase su acceso en el ordenador.
//debería comprobar si el usuario es correcto
$ssql = «select * from usuario where usuario = ‘» . $_POST[«usuario»] . «‘ and clave='» . $_POST[«clave»] . «‘»;
//echo $ssql;
$rs = mysql_query($ssql);
if (mysql_num_rows($rs)==1){
//TODO CORRECTO!! He detectado un usuario
$usuario_encontrado = mysql_fetch_object($rs);
//ahora debo de ver si el usuario quería memorizar su cuenta en este ordenador
if ($_POST[«guardar_clave»]==»1″){
//es que pidió memorizar el usuario
//1) creo una marca aleatoria en el registro de este usuario
//alimentamos el generador de aleatorios
mt_srand (time());
//generamos un número aleatorio
$numero_aleatorio = mt_rand(1000000,999999999);
//2) meto la marca aleatoria en la tabla de usuario
$ssql = «update usuario set cookie=’$numero_aleatorio’ where id_usuario=» . $usuario_encontrado->id_usuario;
mysql_query($ssql);
//3) ahora meto una cookie en el ordenador del usuario con el identificador del usuario y la cookie aleatoria
setcookie(«id_usuario_dw», $usuario_encontrado->id_usuario , time()+(60*60*24*365));
setcookie(«marca_aleatoria_usuario_dw», $numero_aleatorio, time()+(60*60*24*365));
}
echo «Autenticado correctamente»;
//header («Location: contenidos_protegidos_cookie.php»);
}else{
echo «Fallo de autenticación!»;
echo «<p><a href=’prueba-cookies.php’>Volver</a>»;
}
Para comprobar si los datos de autenticación que recibimos por el formulario son correctos, hacemos una sentencia SQL. La ejecutamos y si nos da como resultado que tenemos un registro encontrado en la tabla de usuarios, es que el nombre de usuario y clave corresponden con el de algún usuario.
Luego con la línea
if ($_POST[«guardar_clave»]==»1″){
Comprobamos si el visitante había pedido que se almacenase la clave en su ordenador. Entonces hay que generar las cookies correspondientes, que habíamos comentado anteriormente en este artículo.
Lo hacemos en tres pasos:
| Nota: Es importante señalar que, para colocar o crer cookies en el navegador del visitante, debemos hacerlo antes de que se hayan enviado las cabeceras de http, es decir, antes de haber escrito cualquier texto en la página. Si no, nos podría dar un error de http headers already sent. |
Por último veamos el código PHP para ver si detectamos las cookies en el navegador de un usuario autenticado anteriormente en el sistema y guardado en el ordenador del usuario.
//primero tengo que ver si el usuario está memorizado en una cookie
if (isset($_COOKIE[«id_usuario_dw»]) && isset($_COOKIE[«marca_aleatoria_usuario_dw»])){
//Tengo cookies memorizadas
//además voy a comprobar que esas variables no estén vacías
if ($_COOKIE[«id_usuario_dw»]!=»» || $_COOKIE[«marca_aleatoria_usuario_dw»]!=»»){
//Voy a ver si corresponden con algún usuario
$ssql = «select * from usuario where id_usuario=» . $_COOKIE[«id_usuario_dw»] . » and cookie='» . $_COOKIE[«marca_aleatoria_usuario_dw»] . «‘ and cookie<>»»;
$rs = mysql_query($ssql);
if (mysql_num_rows($rs)==1){
echo «<b>Tengo un usuario correcto en una cookie</b>»;
$usuario_encontrado = mysql_fetch_object($rs);
echo «<br>Eres el usuario número » . $usuario_encontrado->id_usuario . «, de nombre » . $usuario_encontrado->usuario;
//header («Location: contenidos_protegidos_cookie.php»);
}
}
}
Ahora presento el código completo de la página de este ejemplo:
<?
//conecto con la base de datos
$conn = mysql_connect(«servidor»,»usuario»,»clave»);
//selecciono la BBDD
mysql_select_db(«base de datos»,$conn);
//primero tengo que ver si el usuario está memorizado en una cookie
if (isset($_COOKIE[«id_usuario_dw»]) && isset($_COOKIE[«marca_aleatoria_usuario_dw»])){
//Tengo cookies memorizadas
//además voy a comprobar que esas variables no estén vacías
if ($_COOKIE[«id_usuario_dw»]!=»» || $_COOKIE[«marca_aleatoria_usuario_dw»]!=»»){
//Voy a ver si corresponden con algún usuario
$ssql = «select * from usuario where id_usuario=» . $_COOKIE[«id_usuario_dw»] . » and cookie='» . $_COOKIE[«marca_aleatoria_usuario_dw»] . «‘ and cookie<>»»;
$rs = mysql_query($ssql);
if (mysql_num_rows($rs)==1){
echo «<b>Tengo un usuario correcto en una cookie</b>»;
$usuario_encontrado = mysql_fetch_object($rs);
echo «<br>Eres el usuario número » . $usuario_encontrado->id_usuario . «, de nombre » . $usuario_encontrado->usuario;
//header («Location: contenidos_protegidos_cookie.php»);
}
}
}
if ($_POST){
//es que estamos recibiendo datos por el formulario de autenticación (recibo de $_POST)
//debería comprobar si el usuario es correcto
$ssql = «select * from usuario where usuario = ‘» . $_POST[«usuario»] . «‘ and clave='» . $_POST[«clave»] . «‘»;
//echo $ssql;
$rs = mysql_query($ssql);
if (mysql_num_rows($rs)==1){
//TODO CORRECTO!! He detectado un usuario
$usuario_encontrado = mysql_fetch_object($rs);
//ahora debo de ver si el usuario quería memorizar su cuenta en este ordenador
if ($_POST[«guardar_clave»]==»1″){
//es que pidió memorizar el usuario
//1) creo una marca aleatoria en el registro de este usuario
//alimentamos el generador de aleatorios
mt_srand (time());
//generamos un número aleatorio
$numero_aleatorio = mt_rand(1000000,999999999);
//2) meto la marca aleatoria en la tabla de usuario
$ssql = «update usuario set cookie=’$numero_aleatorio’ where id_usuario=» . $usuario_encontrado->id_usuario;
mysql_query($ssql);
//3) ahora meto una cookie en el ordenador del usuario con el identificador del usuario y la cookie aleatoria
setcookie(«id_usuario_dw», $usuario_encontrado->id_usuario , time()+(60*60*24*365));
setcookie(«marca_aleatoria_usuario_dw», $numero_aleatorio, time()+(60*60*24*365));
}
echo «Autenticado correctamente»;
//header («Location: contenidos_protegidos_cookie.php»);
}else{
echo «Fallo de autenticación!»;
echo «<p><a href=’prueba-cookies.php’>Volver</a>»;
}
}else{
?>
<!DOCTYPE HTML PUBLIC «-//W3C//DTD HTML 4.01 Transitional//EN»>
<html>
<head>
<title>cookies para detectar usuario</title>
</head>
<body>
<form action=»prueba-cookies.php» method=»post»>
Usuario: <input type=»text» name=»usuario»>
<br>
Clave: <input type=»text» name=»clave»>
<br>
<input type=»checkbox» name=»guardar_clave» value=»1″> Memorizar el usuario en este ordenador
<br>
<input type=»submit» value=»Entrar»>
</form>
<br>
<br>
<b>Usuarios válidos:</b>
<br>
<br>
User: pepe
<br>
Clave: 1234
<br>
<br>
User: juan
<br>
Clave: 1111
</body>
</html>
<?
}
?>

